package mylog

import (
	"fmt"
	"github.com/cihub/seelog"
)

var Logger seelog.LoggerInterface
//根据配置文件初始化seelog的配置信息,这里我们把配置文件通过字符串读取设置好了，
//当然也可以通过读取 XML 文件

//outputs:输出信息的目的地，这里分成了两份数据，一份记录到 mylog rotate 文件里面。另一份设置了filter，如果这个错误级别是 critical，那么将发送报警邮件。
//seelog :minlevel 参数可选，如果被配置,高于或等于此级别的日志会被记录，同理 maxlevel。
//formats:定义了各种日志的格式
//UseLogger:设置当前的日志器为相应的日志处理

//邮件的格式通过 criticalemail 配置，然后通过其他的配置发送邮件服务器的配置，通过recipient 配置接收邮件的用户，如果有多个用户可以再添加一行。
func loadAppConfig() {
	appConfig := `
			<seelog minlevel="warn">
			<outputs formatid="common">
				<rollingfile type="size" filename="/mgface-logs/roll.mylog" maxsize="100000" maxrolls="5"/>
				<filter levels="critical">
					<file path="/mgface-logs/critical.mylog" formatid="critical"/>
					<smtp formatid="criticalemail" senderaddress="374928165@qq.com"
						sendername="www.mgface.com - API" hostname="smtp.qq.com" hostport="587"
						username="374928165@qq.com" password="fenoaqztigtzcaaa">
					<recipient address="15622535353@163.com"/>
					</smtp>
				</filter>
			</outputs>
			<formats>
				<format id="common" format="%Date/%Time [%LEV] %Msg%n" />
				<format id="critical" format="%File %FullPath %Func %Msg%n" />
				<format id="criticalemail" format="Critical error on our server!\n %Time %Date %RelFile %Func %Msg \nSent by Seelog"/>
			</formats>
			</seelog>
			`
	logger, err := seelog.LoggerFromConfigAsBytes([]byte(appConfig))
	if err != nil {
		fmt.Println(err)
		return
	}
	UseLogger(logger)
}
func init() {
	DisableLog()
	loadAppConfig()
}

// DisableLog disables all library mylog output
//初始化全局变量Logger为seelog的禁用状态，主要为了防止Logger被多次初始化
func DisableLog() {
	Logger = seelog.Disabled
}

// UseLogger uses a specified seelog.LoggerInterface to output library mylog.
// Use this func if you are using Seelog logging system in your app.
func UseLogger(newLogger seelog.LoggerInterface) {
	Logger = newLogger
}
